async function async1() {
  console.log('async1 start');
  await async2(); //  async2 会离开执行 await 后面的会等async2执行完后放入微队列
  console.log('async1 end');
}
async function async2() {
  console.log('async2');
}
console.log('script start');

setTimeout(function () {
  console.log('setTimeout0');
}, 0);

setTimeout(function () {
  console.log('setTimeout3');
}, 3);

setImmediate(() => console.log('setImmediate'));

process.nextTick(() => console.log('nextTick'));

async1();

new Promise(function (resolve) {
  console.log('promise1');
  resolve();
  console.log('promise2');
}).then(function () {
  console.log('promise3');
});
console.log('script end');

// script start
// async1 start
// async2
// promise1
// promise2
// script end
// 从这开始 去查微队列
//  nextTick
// async1 end
//  promise3
// 微队列查完了
// 走事件循环 timers
// 这两个在这输出要看 计算机能力
// 绝大多数是情况1
// 情况1
// setTimeout0
// setImmediate
// setTimeout3

// 情况2
// setTimeout0
// setTimeout3
// setImmediate

// 情况3
// setImmediate
// setTimeout0
// setTimeout3
